public class Stars {
    //编写一个 main 方法
    public static void main(String[] args) {
        /*
            *
           * *
          *   *
         *******
         思路分析
         化繁为简
         1. 先打印一个矩形
         *****
         *****
         *****
         *****
         *****
         2. 打印半个金字塔
         * //第 1 层 有 1 个*
         ** //第 2 层 有 2 个*
         *** //第 3 层 有 3 个*
         **** //第 4 层 有 4 个*
         ***** //第 5 层 有 5 个*

         3. 打印整个金字塔
         * //第 1 层 有 1 个* 2 * 1 -1 有 4=(总层数-1)个空格
        *** //第 2 层 有 3 个* 2 * 2 -1 有 3=(总层数-2)个空格
       ***** //第 3 层 有 5 个* 2 * 3 -1 有 2=(总层数-3)个空格
      ******* //第 4 层 有 7 个* 2 * 4 -1 有 1=(总层数-4)个空格
     ********* //第 5 层 有 9 个* 2 * 5 -1 有 0=(总层数-5)个空格

         4. 打印空心的金字塔 [最难的]
         * //第 1 层 有 1 个* 当前行的第一个位置是*,最后一个位置也是*
        * * //第 2 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
       *   * //第 3 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
      *     * //第 4 层 有 2 个* 当前行的第一个位置是*,最后一个位置也是*
     ********* //第 5 层 有 9 个* 全部输出*

         先死后活
         5.层数做成变量 int totalLevel = 5;
         */
        int totalLevel = 20; //层数
        for(int i = 1; i <= totalLevel; i++) { //i 表示层数

            //在输出*之前，还有输出 对应空格 = 总层数-当前层
            for(int k = 1; k <= totalLevel - i; k++ ) {
                System.out.print(" ");
            }

            //控制打印每层的*个数
            for(int j = 1;j <= 2 * i - 1;j++) {
                //当前行的第一个位置是*,最后一个位置也是*, 最后一层全部 *
                if(j == 1 || j == 2 * i - 1 || i == totalLevel) {
                    System.out.print("*");
                } else { //其他情况输出空格
                    System.out.print(" ");
                }
            }
            //每打印完一层的*后，就换行 println 本身会换行
            System.out.println("");
        }
    }
}